﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

using System.Data.SqlClient;
using MySql.Data.MySqlClient;

namespace JA.Negocios
{
    public static partial class ModelBO
    {

        public static BairroVO getBairro(int idBairro, string bairro)
        {
            BairroVO bairroVO = null;
            List<BairroVO> listBairroVOs = getBairros(idBairro, bairro, null, null);
            if (listBairroVOs != null && listBairroVOs.Count > 0)
            {
                bairroVO = listBairroVOs[0];
            }
            return bairroVO;
        }

        public static List<BairroVO> getBairros()
        {
            return getBairros(null,null,null, null);
        }

        public static List<BairroVO> getBairros(int? idBairro, string bairro, string siglaUf, int? idCidade)
        {
            string where = "AND ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdBairro, Bairro, cidade.IdCidade, cidade.Cidade, uf.Sigla, uf.Estado, bairro.Cadastro, bairro.CadastradoPor, bairro.Edicao, bairro.EditadoPor ");
            query.AppendLine("FROM bairro, cidade, uf ");
            query.AppendLine("WHERE bairro.idCidade = cidade.idCidade AND ");
            query.AppendLine("      cidade.sigla = uf.sigla ");
            if (idBairro != null)
            {
                query.AppendLine(where + "IdBairro=?IdBairro ");
                where = "AND ";
            }
            if (bairro != null)
            {
                query.AppendLine(where + "Bairro LIKE ?Bairro ");
                where = "AND ";
            }
            if (idCidade != null)
            {
                query.AppendLine(where + "cidade.IdCidade=?IdCidade ");
                where = "AND ";
            }
            if (siglaUf != null)
            {
                query.AppendLine(where + "uf.Sigla=?Sigla ");
                where = "AND ";
            }

            query.AppendLine("ORDER BY Bairro ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idBairro != null) cmd.Parameters.AddWithValue("?IdBairro", idBairro);
            if (bairro != null) cmd.Parameters.AddWithValue("?Bairro", "%" + bairro + "%");
            if (siglaUf != null) cmd.Parameters.AddWithValue("?Sigla", siglaUf);
            if (idCidade != null) cmd.Parameters.AddWithValue("?IdCidade", idCidade);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<BairroVO> listBairro = new List<BairroVO>();

                while (reader.Read())
                {
                    BairroVO bairroVO = BairroVO.CreateBairroVO();
                    bairroVO.idBairro = reader.GetInt32(reader.GetOrdinal("IdBairro"));
                    bairroVO.bairro = reader.GetString(reader.GetOrdinal("Bairro"));
                    bairroVO.cidade.idCidade = reader.GetInt32(reader.GetOrdinal("IdCidade"));
                    bairroVO.cidade.cidade = reader.GetString(reader.GetOrdinal("Cidade"));
                    bairroVO.cidade.uf.siglaUf = reader.GetString(reader.GetOrdinal("Sigla"));
                    bairroVO.cidade.uf.uf = reader.GetString(reader.GetOrdinal("Estado"));
                    bairroVO.cadastro = reader.GetDateTime(reader.GetOrdinal("Cadastro"));
                    bairroVO.cadastradoPor = reader.GetString(reader.GetOrdinal("CadastradoPor"));
                    bairroVO.edicao = reader.GetDateTime(reader.GetOrdinal("Edicao"));
                    bairroVO.editadoPor = reader.GetString(reader.GetOrdinal("EditadoPor"));
                    listBairro.Add(bairroVO);
                }
                reader.Close();
                return listBairro;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setBairro(BairroVO bairroVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE bairro ");
            query.AppendLine("SET Bairro=?Bairro, IdCidade=?IdCidade, Cadastro=?Cadastro, CadastradoPor=?CadastradoPor, Edicao=?Edicao, EditadoPor=?EditadoPor ");
            query.AppendLine("WHERE IdBairro=?IdBairro ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdBairro", bairroVO.idBairro);
            cmd.Parameters.AddWithValue("?Bairro", bairroVO.bairro);
            cmd.Parameters.AddWithValue("?IdCidade", bairroVO.cidade.idCidade);
            cmd.Parameters.AddWithValue("?Cadastro", bairroVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", bairroVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", bairroVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", bairroVO.editadoPor);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newBairro(BairroVO bairroVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO bairro ");
            query.AppendLine("  ( Bairro, IdCidade, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
            query.AppendLine("VALUES (?Bairro, ?IdCidade, ?Cadastro, ?CadastradoPor, ?Edicao, ?EditadoPor ) ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?Bairro", bairroVO.bairro);
            cmd.Parameters.AddWithValue("?IdCidade", bairroVO.cidade.idCidade);
            cmd.Parameters.AddWithValue("?Cadastro", bairroVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", bairroVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", bairroVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", bairroVO.editadoPor);

            try
            {
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delBairro(BairroVO bairroVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM bairro ");
            query.AppendLine("WHERE IdBairro=?IdBairro ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdBairro", bairroVO.idBairro);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
